//
//  CZEmoticonManager.swift
//  Weibo24
//
//  Created by apple on 16/3/7.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit
//这个类用于管理 表情
class CZEmoticonManager: NSObject {

    //定义4个表情包
    
    /*
        [CZEmoticon]() ->是数组的初始化
        [CZEmoticon()] ->添加了一个 ZEmoticon
    */
    
    // 表情数组是什么类型的?? static
    //最近表情
    static var recentEmoticons: [CZEmoticon] = [CZEmoticon]()
///  默认表情
    static var defaultEmoticons:[CZEmoticon] = CZEmoticonManager.readEmotions("com.sina.default")
///  emoji
    static var emojiEmoticons:[CZEmoticon] = CZEmoticonManager.readEmotions("com.apple.emoji")
///  lxh
    static var lxhEmoticons: [CZEmoticon] = CZEmoticonManager.readEmotions("com.sina.lxh")
    
    // class 类方法
    class func getAllEmoticons() -> [[[CZEmoticon]]] {
      return  [pageEmotcions(recentEmoticons),pageEmotcions(defaultEmoticons),pageEmotcions(emojiEmoticons),pageEmotcions(lxhEmoticons)]
    }
    
    //MARK:--添加最近表情
    class func addRecentEmoticon(emoticon: CZEmoticon?) {
        
        /*
            排重
            1.便利 -可以实现的
            2.content
        */
        if let emo = emoticon{
            // 采用 contains来判断一下数组里 是否有这个表情
            if !recentEmoticons.contains(emo){
                recentEmoticons.insert(emo, atIndex: 0)
                
                 // 最多加20个
                if recentEmoticons.count > 20 {
                    //把多余的最后一个删除
                    recentEmoticons.removeLast()
                }
            }
            
           
        
        }
        
    }
    
    // 任务就是读取数据,然后添加到对应的表情包了
    class func readEmotions(package: String) -> [CZEmoticon]{
        
        /*
            图片的绝对路径 = packagePath + 图片的png 
        */
        
        //创建一个数组
         var result = [CZEmoticon]()
        
        // 1. 获取 Emoticons.bundle 的路径
        let bundlePath = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        // 2.获取表情的文件夹的路径
        let packagePath = (bundlePath as NSString).stringByAppendingPathComponent(package)
        // 3.获取info.plst的路径
        let infoPath = (packagePath as NSString).stringByAppendingPathComponent("info.plist")
        // 4. 读取
        let dic = NSDictionary(contentsOfFile: infoPath)!
        
       //5.获取emoticons
        let emoticons = dic["emoticons"] as! [[String: NSObject]]
        
        // 遍历 字典转模型
        for emoticon in emoticons{
        
            let emo = CZEmoticon(dic: emoticon)
            //把包路劲传递给 emoticon
            emo.path = packagePath
            
            result.append(emo)
            
        }
        
        return result
    }
    
    //需要对数组进行分页
    // 每 20个为一页
    //
    class func pageEmotcions(emoticons:[CZEmoticon]) -> [[CZEmoticon]] {
    
        // 表情 有 25
        // 第一页 20
        // 第二页 5
        // 需要判断最后一页,是否等于20.如果小于20,让截取的长度 等于那个长度
        var result = [[CZEmoticon]]()
        //得知道有多少个表情
        let count = emoticons.count
        
        // 知道多少页
        let page = (count - 1)/20 + 1
        
        //切割原有的数组
        for i in 0..<page {
            //定义一个长度,用于记录切割长度
            var len = 20
            // 判断最后一页
            if i == page-1 {
                // 数组的长度 - 页数*每页的个数 = 剩余切割的长度
                // 需要注意边界值
                if count - i*20 >= 0{
                    
                    len = count - i*20
                }
                

            }
            
            let subArray = (emoticons as NSArray).subarrayWithRange(NSMakeRange(i*20, len)) as! [CZEmoticon]
            
            result.append(subArray)
            
        }
    
        return result
    }
    
}
